﻿using SportComplex.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace SportComplex.Program.Pages
{
    /// <summary>
    /// Логика взаимодействия для SignInOut.xaml
    /// </summary>
    public partial class SignInOut : Page
    {
        private Clients client = new Clients();

        public SignInOut()
        {
            InitializeComponent();
            DataContext = client;

            // Выбор конфигурации в зависимости от пользователя
            switch (GlobalVaribles.type_user)
            {
                case 0: // админ
                    gridFormAuthАdmin.Visibility = Visibility.Visible;
                    break;
                case 1: // тренер
                    gridFormAuthTrainer.Visibility = Visibility.Visible;
                    break;
                case 2: // клиент
                    gridFormAuthClient.Visibility = Visibility.Visible;
                    break;
            }
        }

        // Вернуться на страницу режима подключения
        private void backBtn_Click(object sender, RoutedEventArgs e)
        {
            gridFormAuthClient.Visibility = Visibility.Hidden;
            gridFormRegClient.Visibility = Visibility.Hidden;
            gridFormAuthTrainer.Visibility = Visibility.Hidden;
            gridFormAuthАdmin.Visibility = Visibility.Hidden;

            NavigationService.GoBack();
        }

        // Открытие формы для регистрации клиента
        private void openRegClientBtn_Click(object sender, RoutedEventArgs e)
        {
            gridFormAuthClient.Visibility = Visibility.Hidden;
            gridFormRegClient.Visibility = Visibility.Visible;
        }

        // Авторизация клиента
        private void authClientBtn_Click(object sender, RoutedEventArgs e)
        {
            // Переменные для MessageBox
            string m_aut = "Аутентификация";
            string m_errorincor = "Ошибка! Проверьте правильность данных!";

            if (clientLoginAuthTxb.Text != "" && clientLoginAuthTxb.Text != null ||
                clientPassAuthPbx.Password != "" && clientPassAuthPbx.Password != null)
            {
                string Login = clientLoginAuthTxb.Text;
                string Pass = clientPassAuthPbx.Password;

                bool flag = false;

                // Просмотр записей в таблице
                foreach (var record in Entities.GetContext().Clients)
                {
                    if (Login == record.login)
                    {
                        if (Pass == record.passwd)
                        {
                            flag = true;
                            GlobalVaribles.name_user = Login + $" ({record.lfname})";
                            NavigationService.Navigate(new View());
                            break;
                        }
                    }
                }

                if (!flag)
                    // Если пользователь не существует
                    MessageBox.Show(m_errorincor, m_aut, MessageBoxButton.OK, MessageBoxImage.Error);
            }
            else
                // Если данные в полях пустые
                MessageBox.Show(m_errorincor, m_aut, MessageBoxButton.OK, MessageBoxImage.Warning);
        }

        // Регистрация нового клиента
        private void regClientBtn_Click(object sender, RoutedEventArgs e)
        {
            // Предварительная проверка
            StringBuilder errors = new StringBuilder();

            if (string.IsNullOrWhiteSpace(client.lfname))
                errors.AppendLine("* Отсутствует ФИ (Фамилия, Имя)!");
            if (string.IsNullOrWhiteSpace(client.login))
                errors.AppendLine("* Не указан логин!");
            foreach (var record in Entities.GetContext().Clients)
            {
                if (client.login == record.login)
                    errors.AppendLine("* Такой логин уже существует!");
            }
            if (string.IsNullOrWhiteSpace(client.passwd))
                errors.AppendLine("* Не указан пароль!");
            if (string.IsNullOrWhiteSpace(client.email))
                errors.AppendLine("* Не указана почта!");

            // Если есть ошибки, то вывести это
            if (errors.Length > 0)
            {
                MessageBox.Show(errors.ToString());
                return;
            }

            // Добавить новую запись
            if (client.ID_client == 0)
                Entities.GetContext().Clients.Add(client);

            try
            {
                Entities.GetContext().SaveChanges();
                MessageBox.Show("Данные сохранены");
                gridFormRegClient.Visibility = Visibility.Hidden;
                gridFormAuthClient.Visibility = Visibility.Visible;
            }
            catch (Exception ex)
            { MessageBox.Show(ex.Message); }
        }

        // Авторизация тренера
        private void authTrainerBtn_Click(object sender, RoutedEventArgs e)
        {
            // Переменные для MessageBox
            string m_aut = "Аутентификация";
            string m_errorincor = "Ошибка! Проверьте правильность данных!";

            if (trainerLoginAuthTxb.Text != "" && trainerLoginAuthTxb.Text != null ||
                trainerPassAuthPbx.Password != "" && trainerPassAuthPbx.Password != null)
            {
                string Login = trainerLoginAuthTxb.Text;
                string Pass = trainerPassAuthPbx.Password;

                bool flag = false;

                // Просмотр записей в таблице
                foreach (var record in Entities.GetContext().Trainers)
                {
                    if (Login == record.login)
                    {
                        if (Pass == record.passwd)
                        {
                            flag = true;
                            GlobalVaribles.name_user = Login + $" ({record.lfname})";
                            NavigationService.Navigate(new View());
                            break;
                        }
                    }
                }

                if (!flag)
                    // Если пользователь не существует
                    MessageBox.Show(m_errorincor, m_aut, MessageBoxButton.OK, MessageBoxImage.Error);
            }
            else
                // Если данные в полях пустые
                MessageBox.Show(m_errorincor, m_aut, MessageBoxButton.OK, MessageBoxImage.Warning);
        }

        // Авторизация админа
        private void authAdminBtn_Click(object sender, RoutedEventArgs e)
        {
            // Переменные для MessageBox
            string m_aut = "Аутентификация";
            string m_errorincor = "Ошибка! Проверьте правильность данных!";

            if (adminLoginAuthTxb.Text != "" && adminLoginAuthTxb.Text != null ||
                adminPassAuthPbx.Password != "" && adminPassAuthPbx.Password != null)
            {
                string Login = adminLoginAuthTxb.Text;
                string Pass = adminPassAuthPbx.Password;

                bool flag = false;

                // Просмотр записей в таблице
                foreach (var record in Entities.GetContext().Admins)
                {
                    if (Login == record.login)
                    {
                        if (Pass == record.passwd)
                        {
                            flag = true;
                            GlobalVaribles.name_user = Login;
                            NavigationService.Navigate(new View());
                            break;
                        }
                    }
                }

                if (!flag)
                    // Если пользователь не существует
                    MessageBox.Show(m_errorincor, m_aut, MessageBoxButton.OK, MessageBoxImage.Error);
            }
            else
                // Если данные в полях пустые
                MessageBox.Show(m_errorincor, m_aut, MessageBoxButton.OK, MessageBoxImage.Warning);
        }


    }
}
